package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingWorker;
import javax.xml.crypto.Data;

import model.DelBehandlingPakkeKlar;
import model.Lager;

import service.Service;

/**
 * 
 * @author Martin Sax og Daniel Nissen
 * 
 */
public class LagerStatus extends JPanel implements CarlettiPanel {
	private JPanel panelNorth;
	private JPanel panelCenter;
	private JLabel lblLagerStatus;
	private List<JButton> btnLagerPladser = new ArrayList<JButton>();
	private MainFrame m;
	private UpdateLager ul = new UpdateLager();

	public List<JButton> getBtnLagerPladser() {
		return btnLagerPladser;
	}

	/**
	 * Create the panel.
	 */
	public LagerStatus(MainFrame m) {
		
		this.m = m;
		setLayout(new BorderLayout(0, 0));

		panelNorth = new JPanel();
		add(panelNorth, BorderLayout.NORTH);

		lblLagerStatus = new JLabel("Lager Status");
		panelNorth.add(lblLagerStatus);

		panelCenter = new JPanel();
		add(panelCenter, BorderLayout.CENTER);
		panelCenter.setLayout(new GridLayout(3, 0, 1, 1));

		for (int i = 1; i <= Service.getLager().getAntalPladser(); i++) {
			JButton btn = new JButton(""
					+ Service.getLager().getLagerPladser().get(i - 1)
							.getPladsNr());
			btn.setOpaque(true);
			btn.setMargin(new Insets(10, 0, 10, 0));
			btnLagerPladser.add(btn);
			btnLagerPladser.get(i - 1).addActionListener(
					new BtnLagerStatusListner());
		}
		// // Søren Lorentzen
		int i3 = 1;
		int i2 = 0;
		while (i3 <= 3) {
			while (i2 < Service.getLager().getAntalPladser() / 3) {
				panelCenter.add(btnLagerPladser.get(i3 + (i2 * 3) - 1));
				i2++;
			}
			i2 = 0;
			i3++;
		}
	}

	private class BtnLagerStatusListner implements ActionListener {
		public void actionPerformed(ActionEvent arg0) {
			int i = 0;
			boolean found = false;
			while (i < btnLagerPladser.size() - 1 && !found) {
				if (arg0.getSource() == btnLagerPladser.get(i)) {
					m.lagerPladsStatus.setLagerPlads(i);
					m.setVisibelity(m.lagerPladsStatus);
					found = true;
				}
				i++;
			}
		}
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub

	}
	
	public void runUL(){
		ul.execute();
	}
	private class UpdateLager extends SwingWorker<Data, Long> {

		public UpdateLager() {

		}

		@Override
		protected Data doInBackground() throws Exception {
			while(true){
				Lager lager = Service.getLager();
				for (int i = 1; i <= lager.getAntalPladser(); i++) {// MAX
					
					if (lager.getLagerPladser().get(i - 1)
							.getMellemVare() != null) {
						if (lager.getLagerPladser().get(i - 1)
								.getMellemVare().getTimeStamp()
								.getDelBehandling() instanceof DelBehandlingPakkeKlar) {
							if (lager.getLagerPladser().get(i - 1)
									.getMellemVare().getMaxTidTilbage() >= 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.RED);
							} else {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.BLACK);
							}
						} else {
							if (lager.getLagerPladser().get(i - 1)
									.getMellemVare().getMinTidTilbage() < 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.GRAY);
							} else if (lager.getLagerPladser()
									.get(i - 1).getMellemVare().getIdeelTid()
									+ lager.getLagerPladser().get(
											i - 1).getMellemVare()
											.getMinTidTilbage() < 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.YELLOW);
							} else if (lager.getLagerPladser()
									.get(i - 1).getMellemVare().getIdeelTid()
									+ lager.getLagerPladser().get(
											i - 1).getMellemVare()
											.getMinTidTilbage() > 0
									&& lager.getLagerPladser()
											.get(i - 1).getMellemVare()
											.getIdeelTid() < 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.GREEN);
							} else if (lager.getLagerPladser()
									.get(i - 1).getMellemVare().getIdeelTid()
									- lager.getLagerPladser().get(
											i - 1).getMellemVare()
											.getMaxTidTilbage() > 0
									&& lager.getLagerPladser()
											.get(i - 1).getMellemVare()
											.getMaxTidTilbage() > 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.RED);
							} else if (lager.getLagerPladser()
									.get(i - 1).getMellemVare()
									.getMaxTidTilbage() < 0) {
								getBtnLagerPladser().get(i - 1)
										.setBackground(Color.BLACK);

							}
						}
					} else {
						getBtnLagerPladser().get(i - 1)
								.setBackground(Color.WHITE);
						getBtnLagerPladser().get(i - 1).setOpaque(
								true);
					}
				}
				Thread.sleep(1000);
			}
			}
		}
	}

